# 公司：安徽银杰
# 作者：李伟
# 在调试代码时，断点（Breakpoint）是追踪程序执行流程、分析变量状态的核心工具。无论是调试自己封装的代码（如自定义类、函数）还是 Python 自带的内置模块
# / 标准库，断点的基本使用逻辑一致，但针对不同代码类型（自定义代码 vs 内置代码），断点的设置场景和调试重点略有差异。
#
# 一、断点的核心类型（通用）
# 无论调试什么代码，常用的断点类型（以 PyCharm、VS Code 等主流 IDE 为例）主要有以下几种，理解它们的适用场景是关键：
# 断点类型	作用	适用场景
# 行断点（Line Breakpoint）	程序执行到指定行时暂停	几乎所有场景，尤其是追踪自定义函数的执行步骤、变量变化
# 条件断点（Conditional Breakpoint）	只有当指定条件为True时，程序才在该行暂停	排查特定场景下的问题（如 “当变量age为负数时暂停”“当列表长度为 0 时暂停”）
# 异常断点（Exception Breakpoint）	当程序抛出指定类型的异常时自动暂停（无需手动指定行）	调试报错问题，尤其是不知道异常具体在哪一行抛出时（如KeyError、自定义异常）
# 函数断点（Function Breakpoint）	程序执行到指定函数（无论在哪个文件）时暂停	追踪函数的调用时机（如调试__init__初始化逻辑、内置函数len()的调用）

# 断点使用策略：
# 行断点：在update_age方法的if new_age > 0...行设置行断点，执行时会暂停在这里，此时可以查看new_age的值（200），逐步单步执行（Step Into/Step Over），观察程序是否正确进入else分支。
# 条件断点：如果想只在 “年龄不合法” 时暂停，可在update_age方法的第一行设置条件断点，条件为new_age <= 0 or new_age >= 150。这样只有传入 200、-5 等不合法值时才会暂停，避免正常情况打断调试。
# 函数断点：如果想追踪__init__初始化过程，可设置函数断点Student.__init__，程序创建stu实例时会自动暂停...





class Student:
    def __init__(self, name, age, id):
        # 封装核心属性（用_前缀标识为“私有”，提示外部不要直接访问）
        self._name = name
        self._age = age
        self._id = id

    def get_student_info(self):
        return f"学生的信息如下：姓名：{self._name},年龄：{self._age},学号：{self._id}"

    def update_age(self, new_age):
        if 0<new_age<100:
            self._age = new_age
            return f"年龄已经更新{new_age}"
        else:
            return "年龄输入不合法"


data = Student("李华", -190, 100001)
# print(data.get_student_info())

print(data.update_age(-230))
print(data.get_student_info())
# print(data.age)  #私有化之后 外部无法直接调用